package tech.cn.note.html;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.util.Map;

/**
 * 使用freemarker进行模板数据转换
 * 1.可根据XML或HTML模板进行数据填充
 * 2.模板格式需根据freemarker指定的格式进行设置
 *
 * @author liuyong
 * @see <a href="https://freemarker.apache.org/">FreeMarker</a>
 */
public interface FreeMakerDataFillService {

    /**
     * 根据模板路径及数据源填充数据
     *
     * @param templateFile 模板路径*.ftl或xml
     * @param dataSource   数据源
     * @return
     */
    byte[] processToByte(File templateFile, Map<String, Object> dataSource);


    /**
     * 根据模板路径及数据源填充数据
     *
     * @param templatePath 模板路径*.ftl或xml
     * @param dataSource   数据源
     * @return
     */
    byte[] processToByte(String templatePath, Map<String, Object> dataSource);

    /**
     * 根据模板目录，模板名称及数据源填充数据
     *
     * @param templateDir  模板目录
     * @param templateName 模板名称*.ftl或xml
     * @param dataSource   数据源
     * @return
     */
    byte[] processToByte(String templateDir, String templateName, Map<String, Object> dataSource);


    /**
     * 根据模板路径及数据源填充数据
     *
     * @param templateFile 模板路径*.ftl或xml
     * @param dataSource   数据源
     * @return
     */
    ByteArrayInputStream processToStream(File templateFile, Map<String, Object> dataSource);

    /**
     * 根据模板路径及数据源填充数据
     *
     * @param templatePath 模板路径*.ftl或xml
     * @param dataSource   数据源
     * @return
     */
    ByteArrayInputStream processToStream(String templatePath, Map<String, Object> dataSource);

    /**
     * 根据模板目录，模板名称及数据源填充数据
     *
     * @param templateDir  模板目录
     * @param templateName 模板名称*.ftl或xml
     * @param dataSource   数据源
     * @return
     */
    ByteArrayInputStream processToStream(String templateDir, String templateName, Map<String, Object> dataSource);

}
